package com.leetCode.IntegerDemo;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class MaxProfitDemo {
    public static void main(String[] args) {
        System.out.println(maxProfit1(new int[]{7,1,5,3,6,4}));
    }

    /**
     * 示例 1：
     *
     * 输入：[7,1,5,3,6,4]
     * 输出：5
     * 解释：在第 2 天（价格 = 1）的时候买入，在第 5 天（价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。
     *      注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格；同时，你不能在买入前卖出。
     * 示例 2：
     *
     * 输入：prices = [7,6,4,3,1]
     * 输出：0
     */
    public static int maxProfit(int[] prices) {
        if (prices == null || prices.length == 0){
            return 0;
        }
        int maxProfit = 0;
        for (int i = 0;i < prices.length;i++){
            for (int j = i + 1;j < prices.length;j++){
                if (prices[j] < prices[i]){
                    continue;
                }
                int max = prices[j] - prices[i];
                if (max > maxProfit){
                    maxProfit = max;
                }
            }
        }
        return maxProfit;
    }

    public static int maxProfit1(int[] prices) {
        if (prices == null || prices.length == 0){
            return 0;
        }
        int maxProfit = 0;
        int length = prices.length;
        for (int i = 0;i < length;i++){
            Integer tempMaxValue = 0;
            if (i + 1 != length){
                tempMaxValue = Arrays.stream(Arrays.copyOfRange(prices, i + 1, prices.length)).boxed().distinct().reduce(Integer::max).get();
            } else {
                tempMaxValue = prices[i];
            }
            if (tempMaxValue < prices[i]){
                continue;
            }
            int max = tempMaxValue - prices[i];
            if (max > maxProfit){
                maxProfit = max;
            }
        }
        return maxProfit;
    }
}
